﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sisco.LogicaNegocio;

namespace Sisco.AplicacionEscritorio.Equipo
{
    public partial class RegistroEquipo : Form
    {
        private AccesoDatos.USUARIO usuarioSistema;

        public RegistroEquipo()
        {
            InitializeComponent();
        }

        public RegistroEquipo(AccesoDatos.USUARIO usuariosistema) : this()
        {
            usuarioSistema = usuariosistema;
        }

        private void RegistroEquipo_Load(object sender, EventArgs e)
        {
            this.ListarComboTipoEquipo();
        }

        private void ListarComboTipoEquipo()
        {
            TipoEquipoBLL tipoEquipoBLL = new TipoEquipoBLL();

            cmbTipoEquipo.DataSource = tipoEquipoBLL.Listar();
            cmbTipoEquipo.ValueMember = "ID";
            cmbTipoEquipo.DisplayMember = "NOMBRETIPO";
            cmbTipoEquipo.SelectedIndex = -1;
        }

        private void LimpiarFormulario()
        {
            txtOtroTipo.ResetText();
            cmbTipoEquipo.SelectedIndex = -1;

            txtMarca.ResetText();
            txtModelo.ResetText();
            txtSerieEquipo.ResetText();
        }

        private void rbTipoEquipo_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTipoEquipo.Checked)
            {
                cmbTipoEquipo.Enabled = true;
                this.ListarComboTipoEquipo();
                
                txtOtroTipo.ResetText();
                txtOtroTipo.Enabled = false;
            }
        }

        private void rbOtroTipo_CheckedChanged(object sender, EventArgs e)
        {
            if (rbOtroTipo.Checked)
            {
                cmbTipoEquipo.DataSource = null;
                cmbTipoEquipo.Enabled = false;

                txtOtroTipo.ResetText();
                txtOtroTipo.Enabled = true;
            }
        }

        //private void cmbTipoEquipo_SelectionChangeCommitted(object sender, EventArgs e)
        //{
        //    if (cmbTipoEquipo.SelectedIndex >= 0)
        //    {
        //        TipoEquipoBLL tipoEquipoBLL = new TipoEquipoBLL();

        //        string idTipoEquipo = cmbTipoEquipo.SelectedValue.ToString();
        //        AccesoDatos.TIPOEQUIPO selectedTipoEquipo = tipoEquipoBLL.Obtener(int.Parse(idTipoEquipo));

        //        gbNombreEquipo.Enabled = selectedTipoEquipo.TIENENOMBRETIPO.HasValue ? selectedTipoEquipo.TIENENOMBRETIPO.Value == 1 ? true : false : false;
        //    }
        //}

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            bool correcto = false;
            bool registrarOtroTipo = false;

            if (rbTipoEquipo.Checked)
            {
                if (cmbTipoEquipo.SelectedIndex >= 0)
                {
                    correcto = true;
                }
                else
                {
                    MessageBox.Show("Seleccione el tipo de equipo", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    correcto = false;
                }
            }
            else if (rbOtroTipo.Checked)
            {
                if (!string.IsNullOrWhiteSpace(txtOtroTipo.Text))
                {
                    LogicaNegocio.TipoEquipoBLL tipoEquipoBLL = new TipoEquipoBLL();
                    List<AccesoDatos.TIPOEQUIPO> busquedaTipoEquipo = tipoEquipoBLL.BuscarTipoEquipo(txtOtroTipo.Text);

                    if (busquedaTipoEquipo.Count == 0)
                    {
                        correcto = true;
                        registrarOtroTipo = true;
                    }
                    else
                    {
                        AccesoDatos.TIPOEQUIPO tmpTipoEquipo = busquedaTipoEquipo.First();
                        MessageBox.Show("El tipo de equipo ya se encuentra registrado.\nActive la casilla 'Tipo de Equipo'.", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        this.LimpiarFormulario();
                        correcto = false;
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese un valor para el campo 'Otro Tipo'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    this.LimpiarFormulario();
                    correcto = false;
                }
            }

            if (correcto)
            {
                if (!string.IsNullOrWhiteSpace(txtMarca.Text))
                {
                    if (!string.IsNullOrWhiteSpace(txtModelo.Text))
                    {
                        if (!string.IsNullOrWhiteSpace(txtSerieEquipo.Text))
                        {
                            //verificamos que no exista duplicado
                            LogicaNegocio.EquipoBLL equipoBLL = new LogicaNegocio.EquipoBLL();
                            List<AccesoDatos.EQUIPO> busqueda = new List<AccesoDatos.EQUIPO>();
                            
                            if (rbTipoEquipo.Checked)
                            {
                                busqueda = equipoBLL.BuscarEquipo(int.Parse(cmbTipoEquipo.SelectedValue.ToString()), txtMarca.Text, txtSerieEquipo.Text);
                            }

                            if (busqueda.Count == 0)
                            {
                                int? idTipoEquipo = new Nullable<int>();
                                
                                //se registra el equipo
                                if (registrarOtroTipo)
                                {
                                    //registramos el tipo de equipo nuevo
                                    LogicaNegocio.TipoEquipoBLL tipoEquipoBLL = new TipoEquipoBLL();
                                    AccesoDatos.TIPOEQUIPO nuevoTipoEquipo =
                                        new AccesoDatos.TIPOEQUIPO()
                                        {
                                            NOMBRETIPO = txtOtroTipo.Text,
                                            TIENENOMBRETIPO = 0,
                                            PERMITEPROGRAMA = 0,
                                            ELIMINADO = 0
                                        };
                                     
                                    idTipoEquipo = tipoEquipoBLL.Registrar(nuevoTipoEquipo);
                                }

                                //registramos el equipo
                                LogicaNegocio.EstadoEquipoBLL estadoEquipoBLL = new EstadoEquipoBLL();
                                AccesoDatos.EQUIPO_ESTADO equipoEstado = estadoEquipoBLL.GetEstadoEquipo("Nuevo");

                                LogicaNegocio.EquipoBLL nuevoEquipoBLL = new EquipoBLL();
                                AccesoDatos.EQUIPO nuevoEquipo =
                                    new AccesoDatos.EQUIPO()
                                    {
                                        IDTIPOEQUIPO = rbTipoEquipo.Checked ? Int32.Parse(cmbTipoEquipo.SelectedValue.ToString()) : rbOtroTipo.Checked ? idTipoEquipo.Value != null ? idTipoEquipo : new Nullable<int>() : new Nullable<int>(),
                                        IDESTADO = equipoEstado != null ? equipoEstado.ID : 0,
                                        TIPOEQUIPO = string.Empty,
                                        MARCA = txtMarca.Text,
                                        MODELO = txtModelo.Text,
                                        SERIE = txtSerieEquipo.Text,
                                        ELIMINADO = 0,
                                        IDUSUARIO = new Nullable<int>(),
                                        ASIGNADO = 0,
                                        FECHAREGISTRO = DateTime.Now,
                                        FECHAMODIFICACION = new Nullable<DateTime>(),
                                        NOMBEQUIPO = string.Empty,
                                        REGISTRADOPOR = usuarioSistema.NOMBRECOMPLETO != null ? usuarioSistema.NOMBRECOMPLETO.Trim() : string.Empty
                                    };

                                int equipoRegistrado = nuevoEquipoBLL.Registrar(nuevoEquipo, usuarioSistema);                                

                                if (equipoRegistrado > 0)
                                {
                                    DialogResult pregunta = MessageBox.Show("Equipo registrado.\n¿Desea registrar otro equipo?", "Cotizav", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                                    if (pregunta == DialogResult.Yes)
                                    {
                                        this.LimpiarFormulario();
                                    }
                                    else
                                    {
                                        this.Close();
                                    }
                                }
                            }
                            else
                            {
                                AccesoDatos.EQUIPO tmpEquipo = busqueda.First();
                                MessageBox.Show("La serie ingresada ya se encuentra registrada en el equipo:\nTipo de Equipo: "+tmpEquipo.TIPOEQUIPO1.NOMBRETIPO.Trim()+"\nMarca: " + tmpEquipo.MARCA.Trim() + "\nModelo: " + tmpEquipo.MODELO.Trim() + "\nSerie: " + tmpEquipo.SERIE.Trim(), "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                this.LimpiarFormulario();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Ingrese un valor para el campo 'Serie'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese un valor para el campo 'Modelo'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese un valor para el campo 'Marca'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
